﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
using System.Windows.Forms;

namespace Main
{
    public class checkInput
    {
        /// <summary>
        /// 验证是否为自然数
        /// </summary>
        /// <param name="inputValue">值的字符格式</param>
        /// <param name="ErrorFlagControl">在哪个控件上显示错误</param>
        /// <param name="ep">ErrorProvider控件</param>
        /// <returns></returns>
        public static bool IsNaturalNumber(String inputValue, Control ErrorFlagControl, ErrorProvider ep)
        {
            if (string.IsNullOrEmpty(inputValue))
            {
                ep.SetError(ErrorFlagControl, "不能为空");
                return false;
            }
            else
            {
                if (Regex.IsMatch(inputValue, @"^[1-9]\d*$"))
                {
                    return true;
                }
                else
                {
                    ep.SetError(ErrorFlagControl, "请输入正确的自然数格式");
                    return false;
                }
            }


        }
        /// <summary>
        /// 验证是否是电话号码
        /// </summary>
        /// <param name="inputValue">值的字符格式</param>
        /// <param name="ErrorFlagControl">在哪个控件上显示错误</param>
        /// <param name="ep">ErrorProvider控件</param>
        /// <returns></returns>
        public static bool IsPhoneNumber(String inputValue, Control ErrorFlagControl, ErrorProvider ep)
        {
            if (string.IsNullOrEmpty(inputValue))
            {
                ep.SetError(ErrorFlagControl, "不能为空");
                return false;
            }
            else
            {
                Regex objNotIntPattern = new Regex("^13[0-9]{1}[0-9]{8}|^15[9]{1}[0-9]{8}");
                if (objNotIntPattern.IsMatch(inputValue))
                {
                    return true;
                }
                else
                {
                    ep.SetError(ErrorFlagControl, "请输入正确的电话号码格式");
                    return false;
                }
            }

        }


        /// <summary>
        /// 验证是否是一个IP地址
        /// </summary>
        /// <param name="inputValue">值的字符格式</param>
        /// <param name="ErrorFlagControl">在哪个控件上显示错误</param>
        /// <param name="ep">ErrorProvider控件</param>
        /// <returns></returns>
        public static bool IsIP(String inputValue, Control ErrorFlagControl, ErrorProvider ep)
        {
            if (string.IsNullOrEmpty(inputValue))
            {
                ep.SetError(ErrorFlagControl, "不能为空");
                return false;
            }
            else
            {
                Regex objNotIntPattern = new Regex("^(2[0-5]{2}|2[0-4][0-9]|1?[0-9]{1,2}).(2[0-5]{2}|2[0-4][0-9]|1?[0-9]{1,2}).(2[0-5]{2}|2[0-4][0-9]|1?[0-9]{1,2}).(2[0-5]{2}|2[0-4][0-9]|1?[0-9]{1,2})$");
                if (objNotIntPattern.IsMatch(inputValue))
                {
                    return true;
                }
                else
                {
                    ep.SetError(ErrorFlagControl, "请输入正确的IP地址格式");
                    return false;
                }
            }

        }
        /// <summary>
        /// 验证是否是一个Int值
        /// </summary>
        /// <param name="inputValue">值的字符格式</param>
        /// <param name="ErrorFlagControl">在哪个控件上显示错误</param>
        /// <param name="ep">ErrorProvider控件</param>
        /// <returns></returns>
        public static bool getIntData(string inputValue, Control ErrorFlagControl, ErrorProvider ep)
        {
            try
            {
                Int32.Parse((inputValue.Trim()));
                return true;
            }
            catch (ArgumentNullException ANE)
            {
                if (ErrorFlagControl != null)
                    ep.SetError(ErrorFlagControl, "不能为空");
                return false;
            }
            catch (FormatException FE)
            {
                if (ErrorFlagControl != null)

                    ep.SetError(ErrorFlagControl, "输入的格式应该是一个整数");
                return false;
            }
            catch (OverflowException OE)
            {
                if (ErrorFlagControl != null)

                    ep.SetError(ErrorFlagControl, "输入的值不能超越整数的边界");
                return false;
            }
            catch (Exception ex)
            {
                if (ErrorFlagControl != null)

                    ep.SetError(ErrorFlagControl, "捕获到未知异常");
                return false;
            }
        }
        /// <summary>
        /// 验证是否是一个双精度的浮点值
        /// </summary>
        /// <param name="inputValue">值的字符格式</param>
        /// <param name="ErrorFlagControl">在哪个控件上显示错误</param>
        /// <param name="ep">ErrorProvider控件</param>
        /// <returns></returns>
        public static bool getDoubleData(string inputValue, Control ErrorFlagControl, ErrorProvider ep)
        {
            try
            {
                double.Parse((inputValue.Trim()));
                return true;
            }
            catch (ArgumentNullException ANE)
            {
                if (ErrorFlagControl != null)
                    ep.SetError(ErrorFlagControl, "不能为空");
                return false;
            }
            catch (FormatException FE)
            {
                if (ErrorFlagControl != null)

                    ep.SetError(ErrorFlagControl, "输入的格式应该是一个小数");
                return false;
            }
            catch (OverflowException OE)
            {
                if (ErrorFlagControl != null)

                    ep.SetError(ErrorFlagControl, "输入的值不能超越小数的边界");
                return false;
            }
            catch (Exception ex)
            {
                if (ErrorFlagControl != null)

                    ep.SetError(ErrorFlagControl, "捕获到未知异常");
                return false;
            }
        }
        /// <summary>
        /// 验证是否为空
        /// </summary>
        /// <param name="inputValue">值的字符格式</param>
        /// <param name="ErrorFlagControl">在哪个控件上显示错误</param>
        /// <param name="ep">ErrorProvider控件</param>
        /// <returns></returns>
        public static bool checkIsNullOrEmpty(string inputValue, Control ErrorFlagControl, ErrorProvider ep)
        {
            if (string.IsNullOrEmpty(inputValue))
            {
                ep.SetError(ErrorFlagControl, "不能为空");
                return true;
            }
            else
            {
                return false;
            }
        }
        /// <summary>
        /// 验证是否为固定号码
        /// </summary>
        /// <param name="inputValue">值的字符格式</param>
        /// <param name="ErrorFlagControl">在哪个控件上显示错误</param>
        /// <param name="ep">ErrorProvider控件</param>
        /// <returns></returns>
        public static bool checkIsTel(string inputValue, Control ErrorFlagControl, ErrorProvider ep)
        {
            if (string.IsNullOrEmpty(inputValue))
            {
                ep.SetError(ErrorFlagControl, "不能为空");
                return false;
            }
            else
            {
                Regex objNotIntPattern = new Regex(@"\d{3,4}-\d{7,8}");
                if (objNotIntPattern.IsMatch(inputValue))
                {
                    return true;
                }
                else
                {
                    ep.SetError(ErrorFlagControl, "请输入正确的固定电话号码格式");
                    return false;
                }
            }
        }
    }
}
